class Solution {
public:
    string convert(string s, int numRows) {
        string ret;     //要返回的字符串
        //1.处理边界情况 不构成z字形
        if(numRows==1)
            return s;
        //计算公差（找规律）
        int d=2*numRows-2;
        int n=s.size();     //字符串长度
        //2.第一行
        int i=0,j=0;
        for(i=0;i<n;i+=d)   //第一个0，之后依次加公差
        {
            ret+=s[i];
        }
        //3.处理中间行
        for(int row=1;row<numRows-1;row++)    //从第二行到倒数第二行
        {
            //每行
            //从最开始的两个->之后依次加公差
            for(i=row,j=d-row;i<n||j<n;i+=d,j+=d)
            {
                //有一个可能边界，另外一个可能没边界
                if(i<n) ret+=s[i];
                
                if(j<n) ret+=s[j];
            }
        }
        //4.处理最后一行
        for(i=numRows-1;i<n;i+=d)
        {
            ret+=s[i];
        }
        return ret;

    }
};